#ifndef PROTOCOL_H
#define PROTOCOL_H

#include <stdint.h>
#include "../client/net_client.h"  // 依赖消息类型定义
#include"../online_user/online_user.h"

// 登录请求数据结构
typedef struct {
    const char* account;
    const char* password;
} LoginRequest;

// 登录响应数据结构
typedef struct {
    bool success;
    const char* msg;       // 提示信息（如"登录成功"或"密码错误"）
    uint32_t user_id;      // 登录成功后返回的用户ID
} LoginResponse;


typedef struct{
    const char *name;
    const char *account;
    const char *password;
} RegisterRequest;


typedef struct {
    bool success;
    const char* msg;       // 提示信息（如"注册成功"或"账号已存在错误"）
    uint32_t user_id;      // 注册成功后返回的用户ID
} RegisterResponse;
// 聊天消息请求数据结构


typedef struct {
    uint32_t user_id;
    const char* nickname;
} OnlineUserData;


// 聊天消息（服务器推送）
typedef struct {
    uint32_t from_user_id;  // 发送者ID
    const char* from_nickname;  // 发送者昵称
    const char* content;    // 消息内容
    uint64_t timestamp;     // 时间戳（可选）
} ServerChatMsg;

// 序列化：登录请求 → 字符串（供发送）
char* protocol_serialize_login(LoginRequest* req);

// 反序列化：字符串 → 登录响应（解析服务器返回）
bool protocol_deserialize_login(const char* data, LoginResponse* resp);

char* protocol_serialize_register(RegisterRequest* req);  // 与实现一致
bool protocol_deserialize_register(const char* data, RegisterResponse* resp); 

// 新增：解析服务器推送的在线列表
bool protocol_parse_online_list(const char* data, OnlineUserList* list);

// 新增：解析服务器推送的聊天消息
bool protocol_parse_chat_msg(const char* data, ServerChatMsg* msg);

// 新增：序列化客户端发送的聊天消息（格式："接收者ID:内容"）
char* protocol_serialize_chat_send(uint32_t to_user_id, const char* content);


#endif




